package com.example.blew.omp.system.util;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * <p>
 * 用来对redis做读取操作的方法
 * </p>
 *
 * @author chaodong.zeng@pcitc.com
 * @since 2022/10/20
 */

@Data
@Component
public class RedisUtil {

    @Autowired
    RedisTemplate redisTemplate;

    public <T> Object read(String key){
        Object o = readWriteData(key, null,  true);
        return o;
    }

    public <T> boolean write(String key,T t){
        readWriteData(key, t,  false);
        return true;
    }


    /***
     * 传入存redis的对象，通过class获取对象属于什么类 ，从而分析应该采取什么操作，
     * @param t
     * @param <T>
     * @return
     */
    public <T> T basisClassSaveObj(T t, RedisTemplate redisTemplate, String key) {
        t.toString();
        Class<?> aClass = t.getClass();
        String name = t.getClass().getName();
        if (name.contains("String")) {
            String str = (String) t;
            readWriteData(key, str,  false);
        }
        return null;
    }

    /***
     *
     * @param key
     * @param t (value)
     * @param flag (是否是read数据，true 表示读。 false 表示写)
     */
    public <T> Object readWriteData(String key, T t,  boolean flag) {
        //读
        if (flag) {
            Object o = this.redisTemplate.opsForValue().get(key);
            return o;
        }
        // 写
        else {
            redisTemplate.opsForValue().set(key, t);
        }
        return null;
    }
}